Unity 4.1でも性懲りも無くXcodeから作ったプロジェクトで起動してみる


概要

モジュールのテストとかは、Xcodeで行いたい所存。

テストが完了したらプラグイン化すればいいのだし。

開発速度と繰り返しと苦楽の問題。



Unity 4.0からの変更点


結論からいうと、


・Unityの起動を任意のタイミングにすること→×

・UnityとARCライブラリとかを共存させること→○

・XcodeからOCUnitとかテストを走らせること→○


4.0で可能だった恐ろしいチートのみが不可能になった。正しい。



内容と経緯

4.0の時は、手製の設定でもって、Unity for iOS を

Xcodeで作成したプロジェクトから実行する事が出来た。


好きなときに好きなUnityプロジェクトを起動したり、

XcodeでのObjective-Cのテストなどが可能だった。


参考: UnityのiOS向けビルドを別アプリに含んで起動する

Unityを自動的にビルドする設定にしたときのメモ



が、これが4.1から不可能になった。

UnityのアプリケーションをiOS中から起動すると、Unityの初期化処理中にエラーで落ちる。


もっとも、「穴だったから封じた」的なものではなく、

プロファイラを充実させる過程で、スレッドの数に注目するようになり、

その結果として、チェック機構のalloc過程ですでにthreadが存在する場合、mutexでエラーが起き、

Unity起動中に落ちるようになった、というのが真実っぽい。


Assertionで吹っ飛んでる節もないので、対策としていれた、と言うよりは、

取得して来たデータを変更しようとして、すでに存在してるthreadとぶつかってるような印象。


ま、なんにせよ、試験目的を果たしたプロジェクトが、アップデートで使えなくなった、

という状態に変わりなく。 それはそれでいい。正直好き放題出来すぎてた。



たぶんがんばれば突破できる。

でもがんばらない事に決めた。 テストする方法は残ってたから。



というわけで代替法

1.Xcodeで新規プロジェクトを作成 ARCありでOK

2.設定を調整(ぶっちゃけ以前の UnityのiOS向けビルドを別アプリに含んで起動する の構成がそのまま使える。)

3.Unity出力物をプロジェクトにぶち込む(-fno-objc-arc付与しまくり)

4.main.mをmain.mmに書き換え、ARC使わない設定に変更(-fno-objc-arc付与)、Unity出力物のmain.mmを模倣。


つまり、KSUnityConnectorから接続していた部分は無かった事にする


何かARCを使う部品が存在する場合、

Unity出力物の Classes/AppController.mm の startUnity 関数に書き足すと良いと思う。

調子乗りすぎるとやっぱり怒られるけど。



メリットの移り変わり

これでもまだメリットにまみれていて、

XcodeでUnityプロジェクト自体のテストが実行可能。

つまり、Jenkinsなどでの自動テストに関しては、まったくメリットが失われていない。


デメリットは、どこまでいっても「標準のやり方ではない」事。


自動テストが良いとこまで来たら、プラグイン化して、やっぱり人力でデバッグしような! ケースを作るのは人間だ!

デバッガとかそういうのは仕込みまくる前提で。


自動で出来るフェーズが存在するだけで、やり直し速度が格段にあがる。

なにより自動化できるわけですし。おすし。



すしくいてえ。